package com.bitoon.basketdudes.web.xhr;

import com.bitoon.basketdudes.web.BaseAction;
import com.bitoon.basketdudes.web.TorneoUsuario;
import com.bitoon.basketdudes.web.datos.*;
import com.bitoon.basketdudes.web.jpa.Network;
import com.bitoon.basketdudes.web.jpa.Torneo;
import javax.persistence.*;
import org.apache.log4j.Logger;
import java.util.regex.*;

public class NombreDisponible extends BaseAction {

    private CabeceraXHRNickRegistro cabecera;
    private String nombre;
    private String tipo;

    private Logger log = Logger.getLogger(NombreDisponible.class);

    public String execute() {

        EntityManager em = null;

        setCabecera(new CabeceraXHRNickRegistro());
        getCabecera().setCorrecto(1);

        try {

            log.debug(">>>>>>>>>>>>>>>>>>> tipo: " + tipo);

            if (tipo.equalsIgnoreCase("network")) {
                if (nombre != null) {
                    try {

                        em = emfBasket.createEntityManager(); // checked

                        Query q = em.createNamedQuery("Network.findByNombre");
                        q.setParameter("nombre", nombre.toLowerCase());
                        Network n = (Network)q.getSingleResult();
                        getCabecera().setDisponible(0);
                    } catch (NoResultException nre) { // La network está disponible
                        getCabecera().setDisponible(1);
                    } catch (Exception e) {
                        log.error("Error: ", e);
                        getCabecera().setDisponible(0);
                    } finally {
                        try { em.close(); } catch (Exception e) { }
                    }
                } else {
                    getCabecera().setDisponible(0);
                }
            } else if (tipo.equalsIgnoreCase("torneo")) {
                if (nombre != null) {
                    try {
                        log.debug("comprobando nombre " + nombre);
                        Pattern pt = Pattern.compile(TorneoUsuario.patternNombreTorneo);
                        if (pt.matches(TorneoUsuario.patternNombreTorneo,nombre)) {

                            log.debug("machea el patern");

                            em = emfBasket.createEntityManager(); // checked

                            Query q = em.createNamedQuery("Torneo.findByNombreUrl");
                            q.setParameter("nombreUrl", getNombreUrl(nombre));
                            Torneo n = (Torneo)q.getSingleResult();
                            getCabecera().setDisponible(0);
                        } else {
                            log.debug("no machea el patern !!!");
                        }
                    } catch (NoResultException nre) { // El torneo no está disponible
                        getCabecera().setDisponible(1);
                    } catch (Exception e) {
                        log.error("Error: ", e);
                        getCabecera().setDisponible(0);
                    } finally {
                        try { em.close(); } catch (Exception e) { }
                    }
                }
            } else {
                getCabecera().setDisponible(0);
            }
        } catch (Exception e) {
            log.error("[execute]: " + e, e);
            getCabecera().setDisponible(0);
            getCabecera().setCorrecto(0);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return SUCCESS;
    }

    public CabeceraXHRNickRegistro getCabecera() {
        return cabecera;
    }

    public void setCabecera(CabeceraXHRNickRegistro cabecera) {
        this.cabecera = cabecera;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

}
